package com.common.utils.tool;

import java.util.Calendar;

/**
 * 用于生成Corn表达式
 * @author zhaoj
 * @create 2021/12/1
 */
public class CronUtil {

    /**
     * 生成单次调度
     * 方法摘要：构建Cron表达式
     */
    public static String createDateTimeCorn() {
        Calendar calendar = Calendar.getInstance();
        int second = calendar.get(Calendar.SECOND);
        int min = calendar.get(Calendar.MINUTE);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int month = calendar.get(Calendar.MONTH) + 1;
        int year = calendar.get(Calendar.YEAR);

        //默认延迟10秒
        return  String.format("%d %d %d %d %d ? %d-%d ", second, min, hour, day, month, year-1,year);
    }


    /**
     * 生成小时周期
     * 方法摘要：构建Cron表达式
     */
    public static String createHourLoopCon(int startHour, int startMin, int cycle) {
        return  String.format("0 %d %d/%d * * ? ", startMin, startHour, cycle);
    }


    /**
     * 生成每天周期
     * @param startHour 开始小时
     * @param startMin  开始分钟
     * @return
     */
    public static String createDayLoopCon(int startHour, int startMin) {
        return  String.format("0 %d %d 1/1 * ? ", startMin, startHour);
    }


    /**
     * 生成每天周期
     * @param startHour 开始小时
     * @param startMin  开始分钟
     * @param week 星期几 1-周天 2-周一 3-周二 4-周三 5-周四 6-周五 7-周六
     * @return
     */
    public static String createWeekLoopCon(int startHour, int startMin, int week) {
        return  String.format("0 %d %d ? * %d", startMin, startHour, week);
    }


    // 参考例子
    public static void main(String[] args) {
        //5:30开始  每隔3小时执行一次
        System.out.println(CronUtil.createHourLoopCon(5, 30, 3));
        //每天12:10分执行一次
        System.out.println(createDayLoopCon(12,10));
        //每周天12:10分执行
        System.out.println(createWeekLoopCon(12,10,1));
        System.out.println(createDateTimeCorn());
    }
}
